package cn.ac.iscas.service.common;

import cn.ac.iscas.domain.job.Job;
import cn.ac.iscas.domain.job.JobLog;
import cn.ac.iscas.domain.job.JobStatus;
import cn.ac.iscas.domain.response.job.SubmitJobResponse;
import com.iscas.datasong.lib.common.DataSongException;
import org.json.JSONException;


import java.util.List;
import java.util.Map;

/**
 * @Author: DataSong
 * @Descrition:  注意组件模型文件统一存组件表，其他所有文件存job表
 * @Date: Create in 2020/3/3 22:05
 * @Modified By:
 */
public interface IJobExecutor {
	/**
	 * 执行任务，应该得异步执行
	 * @param job
	 * @return 返回内部标识的唯一id
	 */
	SubmitJobResponse execute(Job job) throws DataSongException, JSONException;

	/**
	 * 获取指定任务的运行日志
	 * @param jobId
	 * @return todo:需要确认任务执行完后再来获取的话是否还有数据？
	 */
	List<JobLog> getJobLog(String jobId) throws DataSongException;

	/**
	 * 停止正在执行的一个任务
	 * @param jobInnerId 任务引擎内部分配的id
	 * @return
	 */
	boolean stop(String jobInnerId);

	/**
	 * 获取任务状态
	 * @param ids
	 * @return
	 */
	Map<String, JobStatus> getJobStatus(List<String> ids);
}

/*注意组件模型文件统一存组件表，其他所有文件存job表*/
